package com.tju.ocean_ecology_website.dto;

import com.tju.ocean_ecology_website.entity.Activity;
import com.tju.ocean_ecology_website.entity.ActivitySignup;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.List;

/**
 * 项目DTO
 * 用于返回给前端的项目数据
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProjectDTO {
    private Long id;                    // 项目ID
    private String title;               // 项目标题
    private String description;         // 项目描述
    private String image;               // 项目封面图
    private Long organizationId;        // 主办方ID
    private String organizationName;    // 主办方名称
    private Date date;                  // 开始时间
    private Date endDate;               // 结束时间
    private String location;            // 活动地点
    private String fullAddress;         // 详细地址
    private String locationImage;       // 地点图片
    private Integer status;             // 项目状态：0-未开始 1-报名中 2-进行中 3-已结束
    private Integer maxParticipants;    // 最大参与人数
    private Integer currentParticipants;// 当前参与人数
    private Integer duration;           // 项目时长（分钟）
    private Date createTime;            // 创建时间
    private Date updateTime;            // 更新时间

    // 志愿者参与信息
    private Date joinTime;              // 报名时间
    private Integer myDuration;         // 个人累计时长（分钟）
    private Integer myRating;           // 个人评分（1-5）
    private Boolean certificate;        // 是否有证书
    private List<HoursRecordDTO> hoursRecords; // 服务时长记录列表
    private Integer participantCount;   // 参与人数（冗余字段，与currentParticipants相同）
    private Integer auditStatus;        // 审核状态（0:未审核, 1:已审核）

    /**
     * 从Activity实体转换为ProjectDTO
     *
     * @param activity 活动实体
     * @return ProjectDTO
     */
    public static ProjectDTO fromActivity(Activity activity) {
        if (activity == null) {
            return null;
        }

        return ProjectDTO.builder()
                .id(activity.getId())
                .title(activity.getTitle())
                .description(activity.getDescription())
                .image(activity.getImage())
                .organizationId(activity.getOrganizationId())
                .organizationName(activity.getOrganizationName())
                .date(activity.getDate())
                .endDate(activity.getEndDate())
                .location(activity.getLocation())
                .fullAddress(activity.getFullAddress())
                .locationImage(activity.getLocationImage())
                .status(activity.getStatus())
                .maxParticipants(activity.getMaxParticipants())
                .currentParticipants(activity.getCurrentParticipants())
                .duration(activity.getDuration())
                .createTime(activity.getCreateTime())
                .updateTime(activity.getUpdateTime())
                .auditStatus(activity.getAuditStatus())
                .participantCount(activity.getCurrentParticipants())
                .certificate(false) // 默认值，实际应根据项目配置决定
                .build();
    }

    /**
     * 从Activity实体和ActivitySignup实体转换为ProjectDTO
     *
     * @param activity 活动实体
     * @param signup 报名实体
     * @return ProjectDTO
     */
    public static ProjectDTO fromActivityAndSignup(Activity activity, ActivitySignup signup) {
        ProjectDTO dto = fromActivity(activity);

        if (dto != null && signup != null) {
            dto.setJoinTime(signup.getSignupTime());
            // 其他字段需要从其他地方获取
        }

        return dto;
    }
}
